package com.yami.shop.sys.common.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.sys.common.model.SysMenu;

import java.util.List;
import java.util.Set;


/**
 * 菜单管理
 * @author lgh
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 获取用户菜单列表
     * @param userId 用户id
     * @return 菜单列表
     */
    List<SysMenu> listMenuByUserId(Long userId);

    /**
     * 删除 菜单，与角色菜单之间的关系
     * @param menuId 菜单id
     */
    void deleteMenuAndRoleMenu(Long menuId);

    /**
     * 根据角色ID，获取菜单列表
     * @param roleId 角色id
     * @return 角色所拥有的菜单id列表
     */
    List<Long> listMenuIdByRoleId(Long roleId);

    /**
     * 获取简单的menu tree 用于在ele-ui tree中显示，根据orderNum排序
     * @return 所有的菜单
     */
    List<SysMenu> listSimpleMenuNoButton();

    /**
     * 获取一级菜单
     * @return 一级菜单列表
     */
    List<SysMenu> listRootMenu();

    /**
     * 根据一级菜单id 获取二级菜单
     * @param parentId 一级菜单id
     * @return 二级菜单列表
     */
    List<SysMenu> listChildrenMenuByParentId(Long parentId);

    /**
     * 批量获取菜单以及按钮
     * @return 系统的所有菜单以及按钮
     */
    List<SysMenu> listMenuAndBtn(Long userId);

    /**
     * 根据菜单id修改子菜单和子按钮的是否隐藏状态
     * @param menuId 菜单id
     * @param state 状态
     */
    Set<String> updateSonMenuState(Long menuId, Integer state);

    /**
     * 获取被隐藏的按钮权限
     * @return
     */
    Set<String> listConcealButtonPerms();

    /**
     * 或者指定的菜单的名称
     * @param perms
     * @return
     */
    List<String> listMenuNameByPerms(String perms);

    /**
     * 保存系统菜单
     * @param menu
     */
    void saveSysMenu(SysMenu menu);

    /**
     * 更新系统菜单
     * @param menu
     */
    void updateSysMenu(SysMenu menu);

    /**
     * 获取指定系统菜单
     * @param menuId
     * @return
     */
    SysMenu getSysMenuById(Long menuId);
}
